with order_today as (
    select
        id
        ,customer_order_id
        ,order_source_code
        ,order_source_name
        ,order_type_code
        ,waybill_id
        ,origin_id
        --,origin_code
        --,origin_name
        ,sender_name
        --,sender_company
        --,sender_mobile_phone
        --,sender_telphone
        --,sender_country_id
        --,sender_country_name
        ,sender_province_id
        --,sender_province_name
        ,sender_city_id
        --,sender_city_name
        ,sender_area_id
        --,sender_area_name
        ,sender_township
        ,sender_street
        ,sender_detailed_address
        --,sender_postal_code
        --,sender_email
        --,is_privacy
        --,phone_contact
        ,receiver_name
        --,receiver_company
        --,receiver_mobile_phone
        --,receiver_telphone
        ,destination_id
        --,destination_code
        --,destination_name
        --,receiver_country_id
        --,receiver_country_name
        ,receiver_province_id
        --,receiver_province_name
        ,receiver_city_id
        --,receiver_city_name
        ,receiver_area_id
        --,receiver_area_name
        ,receiver_township
        ,receiver_street
        ,receiver_detailed_address
        --,receiver_postal_code
        --,receiver_email
        --,receiver_sorting_code
        ,terminal_dispatch_code
        ,nullif(split(terminal_dispatch_code, ',')[0], '') AS first_code
        ,nullif(split(terminal_dispatch_code, ',')[1], '') AS second_code
        ,nullif(split(terminal_dispatch_code, ',')[2], '') AS third_code
        --,accurate
        --,remarks
        ,express_type_code
        --,express_type_name
        --,insured
        --,cast(declared_value as decimal(14,2)) as    declared_value
        --,cast(insured_value as decimal(14,2)) as    insured_value
        --,cod_need
        --,cast(cod_money as decimal(14,2))  as    cod_money
        --,cast(cod_fee as decimal(14,2))  as    cod_fee
        --,cod_currency_type_code
        --,cod_currency_type_name
        ,goods_type_code
        ,goods_name
        --,package_number
        --,cast(package_length as decimal(9,2))  as    package_length
        --,cast(package_wide as decimal(9,2))     as    package_wide
        --,cast(package_high as decimal(9,2))     as    package_high
        ,cast(packate_volume as decimal(9,2))     as    packate_volume
        --,cast(package_charge_weight as decimal(9,2))     as    package_charge_weight
        --,cast(package_total_weight as decimal(9,2))     as    package_total_weight
        --,box_standard_id
        --,box_standard_code
        --,box_standard_name
        --,cast(box_price as decimal(14,2))     as    box_price
        --,cast(standard_value as decimal(14,2))     as    standard_value
        --,cast(receivable_freight as decimal(14,2))     as    receivable_freight
        --,cast(discount_freight as decimal(14,2))     as    discount_freight
        ,cast(total_freight as decimal(14,2))     as    total_freight
        --,payment_mode_code
        --,payment_mode_name
        --,paid_mode_id
        --,paid_mode_code
        --,paid_mode_name
        ,customer_code
        ,customer_name
        --,spm_money_type
        --,send_code
        --,send_name
        --,dispatch_code
        --,dispatch_name
        --,dispatch_number
        ,customer_order_time
        ,input_time
        ,order_status_code
        --,cancel_reason
        ,cancel_time
        --,pick_fail_time
        --,pick_fail_reason
        --,prints_number
        --,best_pick_time_start
        --,best_pick_time_end
        --,real_pick_network_id
        ,real_pick_network_code
        --,real_pick_network_name
        ,dispatch_network_time
        --,pick_network_id
        ,pick_network_code
        --,pick_network_name
        --,dispatch_staff_time
        --,pick_staff_code
        --,pick_staff_name
        ,pick_time
        --,last_dispatch_network_id
        --,last_dispatch_network_name
        --,last_dispatch_network_code
        --,last_dispatch_network_time
        --,dispatch_network_reason
        --,last_dispatch_staff_code
        --,last_dispatch_staff_name
        --,last_dispatch_staff_time
        ,assigner_name
        --,assigner_mobile_phone
        --,cast(goods_value as decimal(14,2))     as    goods_value
        --,express_type_id
        --,goods_type_id
        --,payment_mode_id
        --,box_number
        --,member_id
        --,sender_country_code
        --,receiver_country_code
        --,customer_id
        --,update_by
        --,update_by_name
        ,update_time
        --,last_update_time_sync
        ,is_delete
        ,is_plaintext
        --,create_by
        ,create_by_code
        ,create_by_name
        --,back_dispatch_network_number
        --,back_dispatch_network_reason
        --,back_dispatch_network_time
        ,cast (settlement_weight as decimal(14,2)) as settlement_weight
        --,dispatch_network_id
        --,cancel_reason_code
        --,need_dispatch
        --,proxy_area_id
        ,proxy_area_code
        ,proxy_area_name
        --,cancel_explain
        --,dispatch_proxy_area_time
        --,is_real_name
        ,real_name
        --,id_no_type
        --,id_no
        --,sex
        --,exception_msg
        --,inspection_method
        --,package_volume
        ,customer_waybill_no
        --,is_business
        --,print_status_code
        --,second_code_hit_desc
        ,dispatch_network_code
        --,dispatch_network_name
        --,is_can_cancel
        ,sign_receipt
        --,receipt_waybill_no
        --,last_center_code
        --,last_center_name
        --,cast(receipt_freight as decimal(14,2))     as    receipt_freight
        ,is_transfer
        ,sender_province_name
        ,sender_city_name
        ,sender_area_name
        ,receiver_province_name
        ,receiver_city_name
        ,receiver_area_name
        ,goods_type_name
        ,subscribe_source_name
        ,member_id
        ,sender_mobile_phone
        ,receiver_mobile_phone
        ,receiver_encrypt_phone
        ,pick_staff_code
        ,pick_staff_name
        ,pick_end_time
        ,subscribe_source_code
        ,package_total_weight
        ,package_volume
        ,insured
        ,dispatch_staff_time
        ,back_dispatch_network_time
        ,need_dispatch
        ,cast(goods_value as decimal(14,2))     as    goods_value
        ,prints_number
         ,date_format(input_time,'yyyy-MM-dd-HH') dt --  时间分区
    FROM jms_ods.yl_oms_oms_order_hi
    WHERE dt = '{{ execution_date | cst_hour }}'
    and substr(input_time,1,10) >= '{{ execution_date | date_add(-15) | cst_ds }}'
),
order_history as(
    select
        id
        ,customer_order_id
        ,order_source_code
        ,order_source_name
        ,order_type_code
        ,waybill_id
        ,origin_id
        --,origin_code
        --,origin_name
        ,sender_name
        --,sender_company
        --,sender_mobile_phone
        --,sender_telphone
        --,sender_country_id
        --,sender_country_name
        ,sender_province_id
        --,sender_province_name
        ,sender_city_id
        --,sender_city_name
        ,sender_area_id
        --,sender_area_name
        ,sender_township
        ,sender_street
        ,sender_detailed_address
        --,sender_postal_code
        --,sender_email
        --,is_privacy
        --,phone_contact
        ,receiver_name
        --,receiver_company
        --,receiver_mobile_phone
        --,receiver_telphone
        ,destination_id
        --,destination_code
        --,destination_name
        --,receiver_country_id
        --,receiver_country_name
        ,receiver_province_id
        --,receiver_province_name
        ,receiver_city_id
        --,receiver_city_name
        ,receiver_area_id
        --,receiver_area_name
        ,receiver_township
        ,receiver_street
        ,receiver_detailed_address
        --,receiver_postal_code
        --,receiver_email
        --,receiver_sorting_code
        ,terminal_dispatch_code
        ,first_code
        ,second_code
        ,third_code
        --,accurate
        --,remarks
        ,express_type_code
        --,express_type_name
        --,insured
        --,declared_value
        --,insured_value
        --,cod_need
        --,cod_money
        --,cod_fee
        --,cod_currency_type_code
        --,cod_currency_type_name
        ,goods_type_code
        ,goods_name
        --,package_number
        --,package_length
        --,package_wide
        --,package_high
        ,packate_volume
        --,package_charge_weight
        --,package_total_weight
        --,box_standard_id
        --,box_standard_code
        --,box_standard_name
        --,box_price
        --,standard_value
        --,receivable_freight
        --,discount_freight
        ,total_freight
        --,payment_mode_code
        --,payment_mode_name
        --,paid_mode_id
        --,paid_mode_code
        --,paid_mode_name
        ,customer_code
        ,customer_name
        --,spm_money_type
        --,send_code
        --,send_name
        --,dispatch_code
        --,dispatch_name
        --,dispatch_number
        ,customer_order_time
        ,input_time
        ,order_status_code
        --,cancel_reason
        ,cancel_time
        --,pick_fail_time
        --,pick_fail_reason
        --,prints_number
        --,best_pick_time_start
        --,best_pick_time_end
        --,real_pick_network_id
        ,real_pick_network_code
        --,real_pick_network_name
        ,dispatch_network_time
        --,pick_network_id
        ,pick_network_code
        --,pick_network_name
        --,dispatch_staff_time
        --,pick_staff_code
        --,pick_staff_name
        ,pick_time
        --,last_dispatch_network_id
        --,last_dispatch_network_name
        --,last_dispatch_network_code
        --,last_dispatch_network_time
        --,dispatch_network_reason
        --,last_dispatch_staff_code
        --,last_dispatch_staff_name
        --,last_dispatch_staff_time
        ,assigner_name
        --,assigner_mobile_phone
        --,goods_value
        --,express_type_id
        --,goods_type_id
        --,payment_mode_id
        --,box_number
        --,member_id
        --,sender_country_code
        --,receiver_country_code
        --,customer_id
        --,update_by
        --,update_by_name
        ,update_time
        --,last_update_time_sync
        ,is_delete
        ,is_plaintext
        --,create_by
        ,create_by_code
        ,create_by_name
        --,back_dispatch_network_number
        --,back_dispatch_network_reason
        --,back_dispatch_network_time
        ,settlement_weight
        --,dispatch_network_id
        --,cancel_reason_code
        --,need_dispatch
        --,proxy_area_id
        ,proxy_area_code
        ,proxy_area_name
        --,cancel_explain
        --,dispatch_proxy_area_time
        --,is_real_name
        ,real_name
        --,id_no_type
        --,id_no
        --,sex
        --,exception_msg
        --,inspection_method
        --,package_volume
        ,customer_waybill_no
        --,is_business
        --,print_status_code
        --,second_code_hit_desc
        ,dispatch_network_code
        --,dispatch_network_name
        --,is_can_cancel
        ,sign_receipt
        --,receipt_waybill_no
        --,last_center_code
        --,last_center_name
        --,receipt_freight
        ,is_transfer
        ,sender_province_name
        ,sender_city_name
        ,sender_area_name
        ,receiver_province_name
        ,receiver_city_name
        ,receiver_area_name
        ,goods_type_name
        ,subscribe_source_name
        ,member_id
        ,sender_mobile_phone
        ,receiver_mobile_phone
        ,receiver_encrypt_phone
        ,pick_staff_code
        ,pick_staff_name
        ,pick_end_time
        ,subscribe_source_code
        ,package_total_weight
        ,package_volume
        ,insured
        ,dispatch_staff_time
        ,back_dispatch_network_time
        ,need_dispatch
        ,goods_value
        ,prints_number
        ,dt --  时间分区
        from jms_dwd.dwd_yl_oms_oms_order_hf
    where dt >= concat('{{ execution_date | date_add(-15) | cst_ds }}','-00')
    AND dt <= '{{ execution_date | hour_add(-1) | cst_hour }}'
),

order_union as (
    select * from
(
    select * ,row_number() over (PARTITION BY id ORDER BY update_time DESC) as rnk
    from (
        select * from order_history
        union all
        select * from order_today
    )  order_mid) t where t.rnk=1
)

INSERT OVERWRITE TABLE jms_dwd.dwd_yl_oms_oms_order_hf PARTITION (dt)
select
    id
    ,customer_order_id
    ,order_source_code
    ,order_source_name
    ,order_type_code
    ,waybill_id
    ,origin_id
    --,origin_code
    --,origin_name
    ,sender_name
    --,sender_company
    --,sender_mobile_phone
    --,sender_telphone
    --,sender_country_id
    --,sender_country_name
    ,sender_province_id
    --,sender_province_name
    ,sender_city_id
    --,sender_city_name
    ,sender_area_id
    --,sender_area_name
    ,sender_township
    ,sender_street
    ,sender_detailed_address
    --,sender_postal_code
    --,sender_email
    --,is_privacy
    --,phone_contact
    ,receiver_name
    --,receiver_company
    --,receiver_mobile_phone
    --,receiver_telphone
    ,destination_id
    --,destination_code
    --,destination_name
    --,receiver_country_id
    --,receiver_country_name
    ,receiver_province_id
    --,receiver_province_name
    ,receiver_city_id
    --,receiver_city_name
    ,receiver_area_id
    --,receiver_area_name
    ,receiver_township
    ,receiver_street
    ,receiver_detailed_address
    --,receiver_postal_code
    --,receiver_email
    --,receiver_sorting_code
    ,terminal_dispatch_code
    ,first_code
    ,second_code
    ,third_code
    --,accurate
    --,remarks
    ,express_type_code
    --,express_type_name
    --,insured
    --,declared_value
    --,insured_value
    --,cod_need
    --,cod_money
    --,cod_fee
    --,cod_currency_type_code
    --,cod_currency_type_name
    ,goods_type_code

    ,goods_name
    --,package_number
    --,package_length
    --,package_wide
    --,package_high
    ,packate_volume
    --,package_charge_weight
    --,package_total_weight
    --,box_standard_id
    --,box_standard_code
    --,box_standard_name
    --,box_price
    --,standard_value
    --,receivable_freight
    --,discount_freight
    ,total_freight
    --,payment_mode_code
    --,payment_mode_name
    --,paid_mode_id
    --,paid_mode_code
    --,paid_mode_name
    ,customer_code
    ,customer_name
    --,spm_money_type
    --,send_code
    --,send_name
    --,dispatch_code
    --,dispatch_name
    --,dispatch_number
    ,customer_order_time
    ,input_time
    ,order_status_code
    --,cancel_reason
    ,cancel_time
    --,pick_fail_time
    --,pick_fail_reason
    --,prints_number
    --,best_pick_time_start
    --,best_pick_time_end
    --,real_pick_network_id
    ,real_pick_network_code
    --,real_pick_network_name
    ,dispatch_network_time
    --,pick_network_id
    ,pick_network_code
    --,pick_network_name
    --,dispatch_staff_time
    --,pick_staff_code
    --,pick_staff_name
    ,pick_time
    --,last_dispatch_network_id
    --,last_dispatch_network_name
    --,last_dispatch_network_code
    --,last_dispatch_network_time
    --,dispatch_network_reason
    --,last_dispatch_staff_code
    --,last_dispatch_staff_name
    --,last_dispatch_staff_time
    ,assigner_name
    --,assigner_mobile_phone
    --,goods_value
    --,express_type_id
    --,goods_type_id
    --,payment_mode_id
    --,box_number
    --,member_id
    --,sender_country_code
    --,receiver_country_code
    --,customer_id
    --,update_by
    --,update_by_name
    ,update_time
    --,last_update_time_sync
    ,is_delete
    ,is_plaintext
    --,create_by
    ,create_by_code
    ,create_by_name
    --,back_dispatch_network_number
    --,back_dispatch_network_reason
    --,back_dispatch_network_time
    ,settlement_weight
    --,dispatch_network_id
    --,cancel_reason_code
    --,need_dispatch
    --,proxy_area_id
    ,proxy_area_code
    ,proxy_area_name
    --,cancel_explain
    --,dispatch_proxy_area_time
    --,is_real_name
    ,real_name
    --,id_no_type
    --,id_no
    --,sex
    --,exception_msg
    --,inspection_method
    --,package_volume
    ,customer_waybill_no
    --,is_business
    --,print_status_code
    --,second_code_hit_desc
    ,dispatch_network_code
    --,dispatch_network_name
    --,is_can_cancel
    ,sign_receipt
    --,receipt_waybill_no
    --,last_center_code
    --,last_center_name
    --,receipt_freight
    ,is_transfer
    ,sender_province_name
    ,sender_city_name
    ,sender_area_name
    ,receiver_province_name
    ,receiver_city_name
    ,receiver_area_name
    ,goods_type_name
    ,subscribe_source_name
    ,member_id
    ,sender_mobile_phone
    ,receiver_mobile_phone
    ,receiver_encrypt_phone
    ,row_number() over (PARTITION BY waybill_id ORDER BY update_time  DESC) as waybill_rnk
    ,pick_staff_code
    ,pick_staff_name
    ,pick_end_time
    ,subscribe_source_code
    ,package_total_weight
    ,package_volume
    ,insured
    ,dispatch_staff_time
    ,back_dispatch_network_time
    ,need_dispatch
    ,goods_value
    ,prints_number
    ,dt --  时间分区
FROM order_union
distribute by dt, abs(hash(id)) % 10 ;